<?php
class ProductosController extends AppController {
    var $name = 'Productos';
    var $appModule = 'Maestros';
    var $helpers = array('Html','Form','Ajax','Javascript','Paginator', 'Number', 'Codigo','GetList','AdcReporter');
    var $components = array('RequestHandler');

    function index($q = null) {    	   
        $q = $this->getBusqueda($this->data['Producto']['busqueda']);
        $this->set('q', $q);

        $this->Producto->Behaviors->attach('Containable');
        $this->paginate['Producto'] = array(
            'order'=>array('Producto.codigo'=>'desc'),
            'fields'=>array(
                'Producto.id',                
                'Producto.codigo',                
                'Producto.descripcion',                
                'Producto.descripcion_corta1',
                'Producto.activo'),
            'contain' => array(
                'Marca'=>array('fields'=>array('codigo', 'descripcion')),                
                'ProductoGrupo'=>array('fields'=>array('id', 'codigo', 'descripcion'))                
        ));
        
        if (!empty($busqueda)){
            $Productos = $this->paginate('Producto', array(
                'Producto.activo ='=>true,
				'Producto.empresa_id'=>$this->empresaId(),                
                'or'=>array(
                    'Producto.descripcion  SIMILAR TO'=>"%$busqueda%",
                    'Producto.descripcion_corta1  SIMILAR TO'=>"%$busqueda%"                    
                )
            ));
        } else {
           	$Productos = $this->paginate('Producto', array(
                'Producto.activo ='=>true,
				'Producto.empresa_id'=>$this->empresaId() ));
        }        
        $this->set('Productos', $Productos);
        $this->set('limite', $this->limite); 
              
    }
/* vista del controlador */
    function view($id = null) {
        
    }
  
/* funcion para agregar */
    public function add() {
        if (!empty($this->data)) {
            $this->data['Producto']['empresa_id']=$this->_usuario['Tercero']['empresa_id'];            
            $this->data['Producto']['activo']=true;
            $this->data['Producto']['usuario_creacion_id']=$this->_usuario['id'];
            $this->data['Producto']['fecha_creacion']='now()';

            $this->Producto->create();
            if ($this->Producto->save($this->data)) {
	            $this->Session->setFlash(__('El Producto ha sido almacenado.', true));
	            $this->redirect(array('action'=>'index'));
            } else {
            	$this->Session->setFlash('El Producto no ha sido guardado. Pruebe de nuevo.');
            }       
        } else {
        	$this->data['Producto']['para_compra'] = true;
        }       

    }
/* funcion para editar */
    function edit($id = null) {
        if ((!$id || !is_numeric($id)) && empty($this->data)) {
            $this->Session->setFlash(__('No se establecieron los datos correctamente', true));
            $this->redirect(array('action'=>'index'));
        }
		if (empty($this->data)) {
			$this->Producto->Behaviors->attach('Containable');	            
            $this->data = $this->Producto->find('first', 
            				array(
            					'conditions'=>array(
            						'Producto.id'=>$id,
            						'Producto.activo'=>true),
            					'contain'=>array(
            						'Marca'=>array('codigo','descripcion'),
            						'UnidadMedida'=>array('id', 'simbolo','descripcion'),
            						'ProductoGrupo'=>array('id', 'codigo','descripcion'),	
            						'ProductoCategoria'=>array('id', 'codigo','descripcion')
            				
            				)));
            //var_dump($this->data);die;
            if(empty($this->data)){
                    $this->Session->setFlash('No se encontró el producto');
                    $this->redirect(array('action'=>'index'),null,true);
            }            
		}
	
    }    
	
    function delete($id = null){
        if (empty($id)) {
            $this->Session->setFlash(__('Producto Invalido', true));
            $this->redirect(array('action'=>'index'));
	}
        $this->Producto->read(null, $id);
        $producto['Producto']['usuario_borrado_id']=$this->_usuario['id'];
        $producto['Producto']['fecha_borrado']='now()';
        $producto['Producto']['activo']=false;

        if($this->Producto->save($producto)){
            $this->Session->setFlash(__('Se ha eliminado con exito.',true));
            $this->redirect(array('action'=>'index'));
        }else{
            $this->Session->setFlash(__('Se ha producido un error al eliminar el producto.',true));
            $this->redirect(array('action'=>'index'));
       }
    }

   
    function process(){
    	
    }
    
    public function ajax(){
     if ($this->RequestHandler->isAjax() && !empty($this->params['form'])) {            
			 Configure::write('debug', 0);
			 $this->autoRender = false;
             $this->autoLayout = false;						
			if(!isset($this->params['form']['action'])){
				$this->params['form']['action'] = 0;
			}
			
			switch ($this->params['form']['action']){					
				case 1: //generar nuevo codigo
					$grupo = $this->params['form']['grupo'];					
					$data = $this->Producto->getCodigo($grupo);				
					$result = $data;
					break;							
				
			}
			if ($result){
				ob_end_clean();
				$this->header('Content-Type: application/json');
				echo json_encode($result);
			}
			else
				echo '';
		}	
    	
    }
    
	public function buscar($q = null){
		if(!empty($this->data['Producto']['q'])){
			$q = $this->data['Producto']['q'];
		} elseif (!empty($this->params['url']['q'])){
			$q = $this->params['url']['q'];
		} elseif (!empty($this->params['form']['q'])){
			$q = $this->params['form']['q'];
		}
						
		if(empty($q)){
			$result = array('Error'=>'No se establecieron los parámetros adecuadamente');
		} else {
			$conditions = array('Producto.activo' => true);	
			$params = explode('_ID_', $q);			
			if( count($params) == 2){
				$conditions['Producto.id'] = $params[1];
			} else {
				$conditions['OR']['Producto.codigo iLike']='%'.strtoupper($q).'%';
				$conditions['OR']['Producto.descripcion iLike']='%'.strtoupper($q).'%';
			}			
			
			$fields = array(
				'Producto.id',				
				'Producto.grupo_id',	
				'Producto.codigo',
				'Producto.descripcion',
				'Producto.importe_base',
				'Producto.valor_venta_tienda',
				'Producto.valor_venta_portal',
				'Producto.unidad_medida_id' );
			
			$this->Producto->Behaviors->attach('Containable');
			$this->Producto->bindModel(array(
					'hasMany'=>array(
						'SaldoAlmacene'=>array(
							'className'=>'SaldoAlmacene',
							'foreingKey'=>'producto_id',
							'conditions'=>array(
								'almacen_id'=>$this->centroDistId(),								
							),
							'order'=>array('ejercicio_id'=>'desc', 'periodo_id'=>'desc'),
							'limit'=>1 ))));
							
			$result = $this->Producto->find('all', array(
				'conditions' => $conditions,
				'contain'=>array(
					'UnidadMedida.simbolo',
					'SaldoAlmacene'
				),							
				'fields' => $fields,
				'order'=>array('Producto.codigo ASC')));
			foreach($result as &$producto){
				if(empty($producto['SaldoAlmacene'])){
					$producto['SaldoAlmacene'] = array(0=>array('saldo_fisico'=>0));
				}
			}
					
		}		
		//definiendo valores en caso q sea una petici�n para autocompletado
		if(!empty($this->params['url']['autocomplete']) || !empty($this->params['form']['autocomplete'])){
			$res = array();
			foreach($result as $value){
				$res[] = array('value'=>'_ID_'.$value['Producto']['id'], 'display'=>'<span style="color:gray;font-size:.9em">'.$value['Producto']['codigo'].'</span><div style="float:right;font-size:.8em" title="'.$value['Producto']['descripcion'].'">'. $this->neat_trim($value['Producto']['descripcion'], 24) .'</div>');
			}
			$result = $res;
		}
		
		if ($this->RequestHandler->isAjax()){			
			if(empty($result)){
				$result = array('error'=>'No se encontraron datos');
			}
			$this->_ajaxify($result);
		} else {
			return $result;
		}
	}
}
?>